﻿namespace MicroCloud.Identity
{
    #region "组织机构信息提供者接口"
    /// <summary>
    /// 组织机构信息提供者接口
    /// </summary>
    public interface IOrganizationProvider
    {
        #region "方法"
        #region "获取用户组织机构集合"
        /// <summary>
        /// 获取用户组织机构集合
        /// </summary>
        /// <param name="userId">用户名称</param>
        /// <returns>简单组织机构DTO集合</returns>
        Task<OrganizationDtoSimple[]> GetUserOrganizations(string userId);
        #endregion
        #region "获取用户组织机构形节点对象集合"
        /// <summary>
        /// 获取用户组织机构形节点对象集合
        /// </summary>
        /// <param name="userId">用户名称</param>
        /// <returns>组织机构集合</returns>
        Task<OrganizationTreeNode[]> GetUserOrganizationTreeNodes(string userId);
        #endregion
        #region "获取组织机构信息"
        /// <summary>
        /// 获取组织机构信息
        /// </summary>
        /// <param name="organizationId">组织机构编号</param>
        /// <returns>组织机构信息</returns>
        OrganizationDtoSimple GetOrganizationById(string organizationId);
        #endregion
        #region "获取组织机构信息"
        /// <summary>
        /// 获取用户组织机构集合
        /// </summary>
        /// <param name="organizationCode">组织机构编码</param>
        /// <returns>组织机构信息</returns>
        OrganizationDtoSimple GetOrganizationByCode(string organizationCode);
        #endregion
        #region "根据部门组织编号获取法人组织机构信息"
        /// <summary>
        /// 根据部门组织编号获取法人组织机构信息
        /// </summary>
        /// <param name="departmentId">部门组织机构编号</param>
        /// <returns>组织机构信息</returns>
        OrganizationDtoSimple GetCorporationOrganizationByDepartmentId(string departmentId);
        #endregion
        #region "获取子级组织机构集合"
        /// <summary>
        /// 获取子级组织机构集合
        /// </summary>
        /// <param name="organizationId">组织机构编号</param>
        /// <returns>子级组织机构集合</returns>
        OrganizationDtoSimple[] GetChildOrganizations(string organizationId);
        #endregion
        #region "获取父级组织机构集合"
        /// <summary>
        /// 获取父级组织机构集合
        /// </summary>
        /// <param name="organizationId">组织机构编号</param>
        /// <returns>父级组织机构集合</returns>
        OrganizationDtoSimple[] GetParentOrganizations(string organizationId);
        #endregion

        #endregion

    }
    #endregion

}
